使用Django的ModelForm对表单进行自动验证(可自定义验证规则)

您所在的位置:网站首页 django form 验证 使用Django的ModelForm对表单进行自动验证(可自定义验证规则)

使用Django的ModelForm对表单进行自动验证(可自定义验证规则)

2023-12-07 16:20| 来源: 网络整理| 查看: 265

通过ModelForm可以直接验证用户键入是否符合model的设计, 但是model设计只能验证手机号码的长度, 无法验证手机号码是否合法. 这时我们就可以自己设计添加验证规则

例如: 某一在线学习网站上, 用户咨询记录表单有三个字段 如下:

这里写图片描述

model设计如下: class UserAsk(models.Model): name = models.CharField(verbose_name='姓名', max_length=20) mobile = models.CharField(verbose_name='手机', max_length=11) course_name = models.CharField(verbose_name='咨询课程', max_length=100) add_time = models.DateTimeField(verbose_name='添加时间', auto_now_add=True) class Meta: verbose_name = '用户咨询' verbose_name_plural = verbose_name Form设计如下(自定义验证规则) import re from django import forms from operation.models import UserAsk class UserAskForm(forms.ModelForm): class Meta: model =UserAsk fields = ['name', 'mobile', 'course_name'] def clean_mobile(self): # 函数必须以clean_开头 """ 通过正则表达式验证手机号码是否合法 """ mobile = self.cleaned_data['mobile'] mobile_regex = r'^1[34578]\d{9}$' p = re.compile(mobile_regex) if p.match(mobile): return mobile else: raise forms.ValidationError('手机号码非法', code='invalid mobile') View设计如下: class UserAskView(View): def post(self, request): userask_form = UserAskForm(request.POST) if userask_form.is_valid(): # ModelForm可以直接将表单数据提交到数据库并保存 user_ask = userask_form.save(commit=True) return HttpResponse('{"status": "success"}', content_type='application/json') else: return HttpResponse('{"status": "failure", "msg": "格式错误"}', content_type='application/json') template Ajax代码 $(function(){ $('#jsStayBtn').on('click', function(){ $.ajax({ cache: false, type: "POST", url:"{% url 'org:user_ask' %}", data:$('#jsStayForm').serialize(), async: true, success: function(data) { if(data.status == 'success'){ $('#jsStayForm')[0].reset(); alert("提交成功") }else if(data.status == 'failure'){ $('#jsCompanyTips').html(data.msg) } } }); }); }) 填写错误的效果

这里写图片描述

正确时浏览器提示

这里写图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3